[新機能]アカウントもしくはオブジェクトグループでSnowflakeクレジットの使用状況を監視・予測・通知できる「Budgets」機能を試してみた

[新機能]アカウントもしくはオブジェクトグループでSnowflakeクレジットの使用状況を監視・予測・通知できる「Budgets」機能を試してみた

Clock Icon2023.10.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

さがらです。

先日、SnowflakeのVer7.35がリリースされました。

このリリースでBudgetsという、特定のSnowflakeオブジェクトのグループに対するアカウントレベルでのSnowflakeクレジット使用量の監視と通知を可能にする機能がリリースされました。※2023年10月19日時点、AWSのSnowflakeインスタンスでのみパブリックプレビュー

  • 公式ブログ

  • 公式ドキュメント

早速このBudgets機能を試してみたので、本記事でその内容をまとめてみます。

Snowflakeで定義できるBudgetsについて

まず、Snowflakeで定義できるBudgetsですが、大きく2種類あります。

  • Account Budget
    • 対象のSnowflakeアカウント内でBudgetsで監視できるすべてのオブジェクトを対象に、クレジット支出の監視・通知が可能
  • Custom Budgets
    • 対象のSnowflakeアカウント内から任意で、監視可能なオブジェクトを選択し、そのオブジェクトグループに関するクレジットの支出の監視・通知が可能

また、2023年10月19日時点では、以下のオブジェクトの監視をサポートしています。

  • Tables
  • Materialized views
  • Schemas
  • Databases
  • Warehouses
  • Pipes
  • Tasks

上述のオブジェクトに関しては、以下のサーバーレス機能のクレジット支出の監視もサポートします。

  • AUTO_CLUSTERING
  • MATERIALIZED_VIEW
  • PIPE
  • QUERY_ACCELERATION
  • REPLICATION
  • SEARCH_OPTIMIZATION
  • SERVERLESS_TASK
  • SNOWPIPE_STREAMING
  • WAREHOUSE_METERING
  • WAREHOUSE_METERING_READER

事前準備

Custom Budgets用の準備

早速Budgetsを試してみたいのですが、Custom Budgetsはスキーマレベルのオブジェクトとなるため、事前にCustom Budgets専用のデータベース・スキーマ・ロールを準備しておくことを推奨します。

私はACCOUNTADMIN権限が使えるユーザーで、以下のクエリを実行しました。参考になると幸いです。(公式Docよりいくつかクエリを引用)

-- ロールをACCOUTADMINに切り替え
use role accountadmin;

-- budgetsオブジェクトを管理するためのデータベース・スキーマを作成
create database budgets_db;
use database budgets_db;
create schema budgets_schema;

-- budgetsを管理するロールを作成
use role accountadmin;
create role budget_admin;

-- 事前に作成しておいたbudgetsオブジェクトを管理するためのデータベース・スキーマへの権限を付与
grant usage on database budgets_db to role budget_admin;
grant usage on schema budgets_db.budgets_schema to role budget_admin;
grant create snowflake.core.budget on schema budgets_db.budgets_schema to role budget_admin;

-- budgetクラスのインスタンスを作成するためのDATABASEロール「SNOWFLAKE.BUDGET_CREATOR」をbudgetsを管理するロールへ付与
grant database role snowflake.budget_creator to role budget_admin;

-- 管理を行うユーザーへ、作成したロールを付与
grant role budget_admin to user <ユーザー名>;

Account Budget用の準備

特定のロールにAccount Budgetの作成権限を付与したい場合は、以下のクエリに含まれるApplication Roleを付与すればOKです。(このクエリは公式Docより引用)

-- 任意:対象のロールにAccount Budgetを作成させたい場合
grant application role snowflake.budget_admin to role budget_admin;

Account Budgetを作成

事前準備は終わったので、早速Account Budgetを作成してみます!

AdminタブのUsageを押します。

画面左上のBudgetsを押します。

この後、画面右上のSet Up Account Budgetを押します。

以下の情報を入力して、Finish Setupを押します。これでAccount Budgetの設定は完了です!

  • Specify a target spending limit that resets monthly:1ヶ月あたりの予算となるクレジットを入力
  • Send email notification when usage exceeds the projected limit:予算の上限を超えた、あるいは超えそうなときのメール通知先を入力

Account Budgetを設定すると、クレジット消費量のグラフ上に設定した値に応じた点線グラフが表示されます。

Custom Budgetsを作成

今度は、Custom Budgetsを作成してみたいと思います。

AdminタブのUsageを押します。

画面左上のBudgetsを押します。

この後、画面右上の+を押します。

以下の項目を設定して、右下のDoneを押します。これでCustom Budgetsの作成は完了です!

  • Budget name:対象のCustom Budgetの名称を入力
  • Create budget in:多少のCustom Budgetを格納するスキーマを設定
  • Spending limit:どれだけのクレジットを消費したらアラートを出すか入力
  • Send email notification when usage exceeds the projected limit:アラートの送信先となるメールアドレスを入力
  • Resources to monitor:クレジット消費量を監視したいデータベース・スキーマ・テーブル・ウェアハウスを選択

作成したCustom Budgetsは、AdminUsageの、下部のResourcesをクリックするとBudgetsがでてくるため、これを選択すると作成したCustom Budgetsが表示されます。

これを押すと、作成したCustom Budgetsについて、Account Budgetと同じような形でグラフを見ることができます。

注意点として、Custom BudgetsではCustom Budgetsを作成したタイミングからしか消費クレジットの計測を行えないです。※公式Docにも記載あり。この点だけご注意ください!

作成したCustom Budgetsで通知を受けてみる(みようとした)

最後に、Custom Budgetsを使って設定したクレジット量を超えたときにどのような通知が飛んでくるのかを試してみます。

先程作成したCustom Budgetsを編集し、すでに超えているクレジット消費量をSpending limitに入力し、Save Changesを押してみます。

すると、Custom BudgetsのSpendのグラフは赤くなりました。

しかし、すでに消費しているクレジット量を超えた値をCustom Budgetsに登録しても、メールは届きませんでした…

無駄にクレジットを消費するわけにも行かないのでw、公式ブログに記載されたいた画像を引用させて頂きます。設定したクレジット量を超えると、下図のようなメールが届きます。

最後に

特定のSnowflakeオブジェクトのグループに対するアカウントレベルでのSnowflakeクレジット使用量の監視と通知を可能にするBudgets機能を試してみました。

これまでもリソースモニターで複数のウェアハウスを対象にクレジット量の監視はできていましたが、Custom Budgetsを使うとTaskやSnowpipeなどのサーバーレス機能の消費クレジットもまとめてグルーピングして監視できるのは大きいと思います。

便利な機能だと思いますので、ぜひご活用ください!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.